#include <iostream>
using namespace std;


//继承方式：
// 1. 继承方式一： public
// 2. 继承方式二： protected
// 3. 继承方式三： private

class Base1 {
public:
    int a;
protected:
    int b;
private:
    int c;
};
class Son1 : public Base1 {
public:
    void show() {
        a = 10; //公有内容 ，类内和类外都可以访问
        b = 20; //受保护的内容 ，类内可以访问，类外无法访问
       // c = 30; //私有内容 ，类内和类外无法访问
    }
};
void test01() {
    Son1 s1;
    s1.a = 100; //正确
    //s1.b = 200; // 错误 b是父类的保护权限， 类外无法访问
    //s1.c = 300; // 错误
}
class Base2 {
public:
    int a;
protected:
    int b;
private:
    int c;
};
class Son2 : protected Base2 {
public:
    void show() {
        a = 10; // 父类中为公共权限
        b = 20; //受保护的内容 ，类内可以访问，类外无法访问
       // c = 30; //私有内容 ，类内和类外无法访问
    }
};
void test02() {
    Son2 s1;
    //s1.a = 100; // 错误 a 由父类中的公共权限 继承到子类为保护权限 ， 因此类外不可访问
    //s1.b = 200; // 错误 b是父类的保护权限， 类外无法访问
    //s1.c = 300; // 错误
}
class Base3 {
public:
    int a;
protected:
    int b;
private:
    int c;
};
class Son3 : private Base3 {
public:
    void show() {
        a = 10;
        b = 20;
       // c = 30; //私有内容 ，类内和类外无法访问
    }
};
void test03() {
    Son3 s1;
    //s1.a = 100; // 错误 a 由父类中的公共权限 继承到子类为私有权限 ， 因此不可访问
    //s1.b = 200; // 错误 b是父类的保护权限 继承到子类中为私有权限 类外无法访问
    //s1.c = 300; // 错误
}